package lanxing.future.base.chapter10;

import org.aspectj.apache.bcel.util.Play;

/**
 * @author <a href="mailto:lanxing@chances.com.cn">lanxing</a>
 * @version 2019年8月4日
 *
 */
public class Games {

    public static void playGame(GameFactory factory) {
        Game game = factory.getGame();
        
        while(game.move()) {
            
        };
    }
    
    public static void main(String[] args) {
        playGame(Checkers.fatory);
        playGame(Chess.fatory);
    }
}

interface Game{
    boolean move();
}

interface GameFactory{
    Game getGame();
}

class Checkers implements Game{

    private Checkers() {}
    
    private int moves = 0;
    
    private static final int MOVES = 3; 

    @Override
    public boolean move() {
        System.out.println("checker move :"+moves);
        return ++moves != MOVES;
    }
    
    
    public static GameFactory fatory = new GameFactory() {
        
        @Override
        public Game getGame() {
            return new Checkers();
        }
    }; 
}

class Chess implements Game{

    private Chess() {}
    
    private int moves = 0;
    
    private static final int MOVES = 4; 

    @Override
    public boolean move() {
        System.out.println("chess move :"+moves);
        return ++moves != MOVES;
    }
     
    public static GameFactory fatory = new GameFactory() {
        
        @Override
        public Game getGame() {
            return new Chess();
        }
    }; 
}

